package com.autumn.mybatis.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.apache.ibatis.plugin.Interceptor;
import org.springframework.context.annotation.Import;

import com.autumn.mybatis.context.AutumnMybatisDefinitionRegister;
import com.autumn.mybatis.factory.DefaultSinglePropertiesDataSourceFactory;
import com.autumn.mybatis.factory.IDataSourceFactory;
import com.autumn.mybatis.provider.IDbProvider;
import com.autumn.mybatis.provider.mysql.MySqlProvider;

/**
 * 启用 Autumn Mybatis
 * 
 * @author 老码农
 *
 *         2017-11-28 12:59:14
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({ AutumnMybatisDefinitionRegister.class })
public @interface EnableAutumnMybatis {

	/**
	 * MyBatis mapper Interface 的包集合
	 * 
	 * @return
	 */
	String[] value();

	/**
	 * 实体(POJO)类型(与数据映射的实体)包路径
	 * 
	 * @return
	 */
	String[] typeAliasesPackages();

	/**
	 * MyBatis mapper 自定义的 xml 配置位置
	 * 
	 * @return
	 */
	String[] mapperLocations() default {};

	/**
	 * MyBatis configLocation 配置文件位置
	 * 
	 * @return
	 * @author 杨昌国 2017-12-04 16:19:09
	 */
	String configLocation() default "";

	/**
	 * autumn 提供者名称
	 * 
	 * @return
	 */
	String autumnDriveName() default "MySql";

	/**
	 * 提供者的类型
	 * 
	 * @return 2017-12-08 16:52:17
	 */
	Class<? extends IDbProvider> autumnDriveType() default MySqlProvider.class;

	/**
	 * 插件类型集
	 * 
	 * @return 2017-12-08 16:53:39
	 */
	Class<? extends Interceptor>[] pluginTypes() default {};
	
	/**
	 * 数据源工厂类型
	 * 
	 * @return
	 *
	 */
	Class<? extends IDataSourceFactory> dataSourceFactoryType() default DefaultSinglePropertiesDataSourceFactory.class;

	/**
	 * 数据源工厂 Bean 名称，如果指定了 Bean 名称则会自动获绑定指定的 Bean
	 * 
	 * @return	
	 */
	String dataSourceFactoryBeanName() default "";
}
